/**
 * Copyright 2011 FeedDreamwork SIG
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

package org.feeddreamwork.fetcher;

import java.net.*;
import org.feeddreamwork.*;

import com.google.appengine.api.taskqueue.*;
import com.google.appengine.api.taskqueue.Queue;

import static com.google.appengine.api.taskqueue.TaskOptions.Builder.*;

public class HttpCachedFetcher extends HttpFetcherBase {
	private String feedId;

	public HttpCachedFetcher(String url, String feedId)
			throws MalformedURLException {
		super(url);
		Utils.throwIfNullOrEmpty(feedId);
		this.feedId = feedId;
	}

	@Override
	public String getContent() {
		String url = this.url.toExternalForm();
		String ret = (String) MiniCache.get("FETCH_" + url);
		if (ret != null) return ret;
		
		PageInfoRepository pageInfoRepo = new PageInfoRepository();
		try {
			PageInfo pageInfo = pageInfoRepo.getPageInfo(url);
			if (pageInfo != null && pageInfo.isFinished()) {
				ret = pageInfo.getContent();
				MiniCache.put("FETCH_" + url, ret);
			}
			
			if (pageInfo == null && pageInfoRepo.addPageInfo(url)) {
				Queue queue = QueueFactory.getDefaultQueue();
				queue.add(withUrl("/tasks/fetchpage").param("url", url).param(
						"feedid", feedId));
			}
			
		} finally {
			pageInfoRepo.close();
		}
		
		return ret;
	}
}
